/**
* \file menu.c
* \brief Comprend les fonctions et les procédures qui permettent de gérer les différents menus.
*/

#include <stdio.h>
#include <stdlib.h>

#include "menu.h"
#include "affichageSDL.h"

#include <SDL/SDL_ttf.h>


// Pour le mode texte

/**
* \fn void menuAff()
* \brief La procédure menuAff permet d'afficher le menu en mode texte
*/

void menuAff()
{
	printf("\nMenu\n");
	printf("3 : 3 chiffres dans la combinaison\n");
	printf("4 : 4 chiffres dans la combinaison\n");
	printf("5 : 5 chiffres dans la combinaison\n");
	printf("6 : Exit\n");
	printf("Votre choix?\n");
	fflush(stdout);
}


/**
* \fn int menuQuestion()
* \brief La fonction menuQuestion permet de gérer le choix du menu en mode texte
*/

int menuQuestion()
{
	int cm;
	int ok=0;

	do
	{
		scanf("%d",&cm);
		if ((cm<3) || (cm>6))
        {
            printf("Erreur choix menu. Veuillez resaisir un choix : ");
        }

        else if (cm == 6)
        {
            ok=1;
        }

		else
        {
            ok=1;
        }
		fflush(stdout);
	}
	while(ok==0);

	printf("\n");
	fflush(stdout);
	return cm;
}



// Pour le mode SDL
/**
* \fn void menuSDL(SDL_Surface *screen, int* navigation, int* taille, int* nbjoueurs)
* \brief La procédure menuSDL permet de gérer les différents menus en mode SDL
*/

int menuSDL(SDL_Surface *screen, int* navigation, int* taille, int* nbjoueurs)
{
    int continuer=1;
    SDL_Surface *menu = NULL;

    while (continuer)
    {
        SDL_Flip(screen);

        if(*navigation == 0) /*affichage du menu : choix entre jouer ou règles du jeu*/
        {
            menu = chargerImage("data/Menu0.bmp");
            appliquerSurface(menu, screen, 0, 0);
        }

        else if(*navigation == 1) /*affichage du menu : choix du niveau*/
        {
            menu = chargerImage("data/Menu1.bmp");
            appliquerSurface(menu, screen, 0, 0);
        }

         else if(*navigation == 2) /*affichage du menu : choix du nombre de joueurs*/
        {
            menu = chargerImage("data/Menu2.bmp");
            appliquerSurface(menu, screen, 0, 0);
        }


        else if(*navigation == 3) /*affichage des règles du jeu 1*/
        {
            menu = chargerImage("data/RèglesDuJeu1.bmp");
            appliquerSurface(menu, screen, 0, 0);
        }

        else if(*navigation == 4) /*affichage des règles du jeu 2*/
        {
            menu = chargerImage("data/RèglesDuJeu2.bmp");
            appliquerSurface(menu, screen, 0, 0);

        }

        else if(*navigation == 6)
        {
            continuer = 0;
        }

        ecouteMenu(screen, navigation, &continuer, taille, nbjoueurs);
    }

    SDL_FreeSurface(menu);

    if(continuer == 1)
    {
        return 1;
    }

    else
    {
        return 0;
    }
}



/**
* \fn void ecouteMenu(SDL_Surface *screen, int* numMenu, int* continuer, int* taille, int* nbjoueurs)
* \brief La procédure ecouteMenu permet de gérer les différents évènements des menus en mode SDL
*/

void ecouteMenu(SDL_Surface *screen, int* numMenu, int* continuer, int* taille, int* nbjoueurs)
{
    int continueEcoute = 1;
    SDL_Event event;
    int x;
    int y;

    if(*numMenu == 0)
    {
        while(continueEcoute)
        {
            SDL_Flip(screen);
            SDL_WaitEvent(&event);

            switch(event.type)
            {
                case SDL_MOUSEBUTTONUP:
                    /*Si le bouton gauche de la souris est pressé*/
                    if(event.button.button == SDL_BUTTON_LEFT)
                    {
                        /*Récupération des coordonnées de la souris*/
                        x = event.button.x;
                        y = event.button.y;

                        /*En fonction de la position de la souris*/
                        if((x >= 265) && (x <= 695) && (y >= 215) && (y <= 300))
                        {
                            *numMenu = 1;
                            continueEcoute = 0;
                        }

                        if((x >= 265) && (x <= 695) && (y >= 385) && (y <= 475))
                        {
                            *numMenu = 3;
                            continueEcoute = 0;

                        }
                    }
                    break;


                case SDL_QUIT: /* si la fenêtre est fermée (appui sur la croix)*/
                    *continuer = 0;
                    *numMenu=-1;
                    continueEcoute = 0;
                    break;


                case SDL_KEYDOWN: /* si type = TOUCHE APPUYE*/
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: /*si touche = ECHAP*/
                            *continuer = 0;
                            *numMenu=-1;
                            continueEcoute=0;
                            break;

                        default:
                            break;
                    }
                    break;

                 default:
                    break;
            }
        }
    }


    if(*numMenu == 1)
    {

     while(continueEcoute)
     {
        SDL_Flip(screen);
        SDL_WaitEvent(&event);

        switch(event.type)
        {
            case SDL_MOUSEBUTTONUP:
                /*Si le bouton gauche de la souris est pressé*/
                if(event.button.button == SDL_BUTTON_LEFT)
                {
                    /*Récupération des coordonnées de la souris*/
                    x = event.button.x;
                    y = event.button.y;

                    /*En fonction de la position de la souris*/
                    if((x >= 255) && (x <= 680) && (y >= 185) && (y <= 265))
                    {
                        *numMenu = 2;
                        *taille = 3;
                        continueEcoute = 0;
                    }

                    if((x >= 255) && (x <= 680) && (y >= 315) && (y <= 395))
                    {
                        *numMenu = 2;
                        *taille = 4;
                        continueEcoute = 0;
                    }

                     if((x >= 255) && (x <= 680) && (y >= 445) && (y <= 525))
                    {
                        *numMenu = 2;
                        *taille = 5;
                        continueEcoute = 0;
                    }
                }
                break;


                case SDL_QUIT: /* si la fenêtre est fermée (appui sur la croix)*/
                    *continuer = 0;
                    *numMenu=-1;
                    continueEcoute=0;
                    break;


                case SDL_KEYDOWN: /*si appui sur une touche*/
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: /* si touche = ECHAP*/
                            *continuer = 0;
                            *numMenu=-1;
                            continueEcoute=0;
                            break;

                        default:
                            break;
                    }
                    break;

                default :
                    break;
            }
        }
    }


    if(*numMenu == 2)
    {
         while(continueEcoute)
         {
            SDL_Flip(screen);
            SDL_WaitEvent(&event);

            switch(event.type)
            {
                case SDL_MOUSEBUTTONUP:
                    /*Si le bouton gauche de la souris est pressé*/
                    if(event.button.button == SDL_BUTTON_LEFT)
                    {
                        /*Récupération des coordonnées de la souris*/
                        x = event.button.x;
                        y = event.button.y;

                        /*En fonction de la position de la souris*/
                        if((x >= 260) && (x <= 680) && (y >= 205) && (y <= 290))
                        {
                            *numMenu = 6;
                            *nbjoueurs = 1;
                            continueEcoute = 0;
                        }

                        if((x >= 260) && (x <= 680) && (y >= 385) && (y <= 470))
                        {
                            *numMenu = 6;
                            *nbjoueurs = 2;
                            continueEcoute = 0;
                        }
                    }
                    break;


                case SDL_QUIT: /* si la fenêtre est fermée (appui sur la croix)*/
                    *continuer = 0;
                    *numMenu=-1;
                    continueEcoute=0;
                    break;


                case SDL_KEYDOWN: /* si type = TOUCHE APPUYE*/
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: /* si touche = ECHAP*/
                            *continuer = 0;
                            *numMenu=-1;
                            continueEcoute=0;
                            break;

                        default:
                            break;
                    }

                 default:
                    break;
            }
        }
    }


    if(*numMenu == 3)
    {

     while(continueEcoute)
     {
        SDL_Flip(screen);
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_MOUSEBUTTONUP:
                /*Si le bouton gauche de la souris est pressé*/
                if(event.button.button == SDL_BUTTON_LEFT)
                {
                    /*Récupération des coordonnées de la souris*/
                    x = event.button.x;
                    y = event.button.y;

                    /*En fonction de la position de la souris*/
                    if((x >= 885) && (x <= 950) && (y >= 595) && (y <= 625))
                    {
                        *numMenu = 4;
                        continueEcoute = 0;
                    }
                }
                break;


            case SDL_QUIT: /*si la fenêtre est fermée (appui sur la croix)*/
                *continuer = 0;
                *numMenu=-1;
                continueEcoute=0;
                break;

            case SDL_KEYDOWN: /*si type = TOUCHE APPUYE*/
                switch (event.key.keysym.sym)
                {
                    case SDLK_ESCAPE: /*si touche = ECHAP*/
                        *continuer = 0;
                        *numMenu=-1;
                        continueEcoute=0;
                        break;

                    default:
                        break;
                }

             default:
                break;
            }
        }
    }


    if(*numMenu == 4)
    {

     while(continueEcoute)
     {
        SDL_Flip(screen);
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_MOUSEBUTTONUP:
                /*Si le bouton gauche de la souris est pressé*/
                if(event.button.button == SDL_BUTTON_LEFT)
                {
                    /*Récupération des coordonnées de la souris*/
                    x = event.button.x;
                    y = event.button.y;

                    /*En fonction de la position de la souris*/
                    if((x >= 300) && (x <= 660) && (y >= 560) && (y <= 610))
                    {
                        *numMenu = 0;
                        continueEcoute = 0;
                    }
                }
                break;


            case SDL_QUIT: /* si la fenêtre est fermée (appui sur la croix)*/
                *continuer = 0;
                *numMenu=-1;
                continueEcoute=0;
                break;

            case SDL_KEYDOWN: /* si type = TOUCHE APPUYE*/
                switch (event.key.keysym.sym)
                {
                    case SDLK_ESCAPE: /*si touche = ECHAP*/
                        *continuer = 0;
                        *numMenu=-1;
                        continueEcoute=0;
                        break;

                    default:
                        break;
                }

             default:
                break;
            }
        }
    }
}
